package MidTerm;
import java.util.concurrent.ConcurrentHashMap;

//车次管理系统
class TrainTicketSystem {
    //使用线程安全的哈希表存储车次信息，键为车次编号，值为对应的TicketSystem对象
    private final ConcurrentHashMap<String, TicketSystem> trains = new ConcurrentHashMap<>();
    /**
        * 添加一个车次及其座位配置
        * @param trainNumber 车次编号（如"G1234"）
        * @param config 座位配置（初始数量及类型）
        */
    public void addTrain(String trainNumber, SeatConfig config) {
        trains.put(trainNumber, new TicketSystem(config));
    }
    /**
        * 售票操作
        * @param trainNumber 车次编号
        * @param type 座位类型
        * @param windowId 售票窗口编号（0为人工，1-5为自动）
        * 注意：窗口编号为0时，代表人工售票，无需处理并发问题，直接调用TicketSystem的sellTicket方法即可。
        * @return 是否售票成功
        */
    public boolean sellTicket(String trainNumber, SeatType type, int windowId) {
        TicketSystem system = trains.get(trainNumber);
        if (system == null) {
            System.out.println("【错误】车次不存在：" + trainNumber);
            return false;
        }
        if (!system.hasSeatType(type)) {
            System.out.println("【错误】车次" + trainNumber + "不支持座位类型：" + type);
            return false;
        }
        return system.sellTicket(trainNumber, type, windowId);
    }
    /**
        * 退票操作
        * @param trainNumber 车次编号
        * @param ticketId 票号
        * @return 是否退票成功
        */
    public boolean refundTicket(String trainNumber, String ticketId) {
        TicketSystem system = trains.get(trainNumber);
        if (system == null) {
            System.out.println("【错误】车次不存在：" + trainNumber);
            return false;
        }
        return system.refundTicket(ticketId);
    }
    /**
        * 获取指定车次的TicketSystem对象
        * @param trainNumber 车次编号
        * @return 对应的TicketSystem对象，如果不存在则返回null
        * 注意：该方法用于获取TicketSystem对象，以便进行统计查询等操作。
        * 由于TicketSystem类本身是线程安全的，因此无需额外的同步措施。
        */
    public TicketSystem getTicketSystem(String trainNumber) {
        return trains.get(trainNumber);
    }

}
